package com.briup.day05;

import java.util.Arrays;

public class ArrayHomework {
    public static void main(String[] args) {
        twoDimensionalArray();
    }

    private static void twoDimensionalArray() {
        // 二维数组：二维数组本质上就是在数组内部存储的元素是各个数组对象
        // 二维数组如何进行声明和初始化，在创建时，必须指定外层一维数组的长度
        int[][] arr = new int[3][];
        // 给外层一维数组的第一个元素赋值
        arr[0] = new int[]{3, 6, 2};
        arr[1] = new int[]{7, 1, 9};
        arr[2] = new int[]{4, 3, 0};
        // 方式2：
        int[][] arr2 = {{3, 6, 2}, {7, 1, 9}, {4, 3, 0}};
        // 从二维数组容器中，每一次获取的元素都是一个一维数组
        for (int[] ints : arr) {
            System.out.println(Arrays.toString(ints));
        }
        // 使用嵌套循环才能获取到二维数组单个指定位置的元素
        System.out.println(arr[1][2]);
    }

    private static void traversal() {
        // 采用两种不同的方式遍历如下数组
        String[] arr = new String[]{"hello", "world", "!"};
        // 遍历：即从头开始，一个一个数组元素的输出
        // 方式一：采用for循环，控制下标的变化，以此输出下标为0到arr.length-1的元素值
        // 这种方式，本质上还是程序员自己控制数组的下标变化，只要是人控制下标变化，那么就存在出错的可能
        for (int i = 0; i < arr.length; i += 2) {
            System.out.println(arr[i]);
            // 如果在简单for循环中给arr[i]赋值，那么会影响到数组中原有的元素值
            // arr[i]本质上就是在通过数组对象的地址值以及数组元素的下标找到对应空间，
            // 然后操作修改该空间的元素
//            arr[i] = "hello";
        }

        System.out.println("==================================");

        // 方式二：采用foreach循环，foreach循环是由jvm控制容器下标的变化
        // foreach循环的语法: for(type var : array){对var进行操作}
        // 这种循环，每一次将容器中的元素值获取，并且赋值给变量var，
        // 操作变量var不能直接影响到原本容器中的数据，
        // 即程序员在foreach循环操作过程中，是无法直接接触到原本容器中的数据元素
        for (String a : arr) {
            System.out.println(a);
            // 对变量a重新赋值
            a = "hello";
        }
        System.out.println(Arrays.toString(arr));
    }

    private static void initArr() {
        // 方式一：通过new的方式创建
        int[] arr = new int[3];
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 20;

        // 方式二：创建数组的同时指定初始值
        int[] arr2 = new int[]{1, 23, 4};

        // 方式三：在方式二的基础上进行简化
        int[] arr3 = {1, 2, 3};
    }
}
